【QT】QGridLayout的基础使用(添加控件、布局、间距) |
您所在的位置:网站首页 › vs code 配置qt环境 › 【QT】QGridLayout的基础使用(添加控件、布局、间距) |
目录 0.环境介绍 1.QGridLayout简介: 2.QGridLayout参数介绍 1)添加控件方式 2)添加布局方式 3.例子及代码 1)三行三列 2)有占多行多列的控件 0.环境介绍windows + vscode + qt 我使用网格布局的情景是(解决的问题):原本用的水平和垂直布局结合来设置整体布局,但当我第一列的label中文字变长时(中文到英文的转换),就会将第二列的QLineEdit控件往后挤,但我希望每一列都是对齐的,所以将水平和垂直布局改成了网格布局,以此来解决第二列不对齐的问题。 网格布局,也叫格栅布局(行列布局),可以将控件或者布局(layout)放入每个小格中 比如,我有一个这样的界面要实现,就可以使用网格布局 红色的线将整体分为9个块(三行三列) 可以通过添加控件(addWidget)的方式,也可以通过添加布局(addLayout)的方式将内容填充至网格布局 2.QGridLayout参数介绍 1)添加控件方式addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0); 参数1 QWidget *:需要填入的内容,得是一个控件,QWidget 或其子控件类; 参数2 row:填入的行数(从0开始) 参数3 column:填入的列数(从0开始) 参数4 rowSpan:占多少行 参数5 columnSpan:占多少列 注意:如果rowSpan或columnSpan的值为-1,则窗口部件将扩展到布局的底部或者右边边缘处 参数6 Qt::Alignment = 0 :对齐方式 2)添加布局方式addLayout(QLayout *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0) 参数与addWidget() 相同 3.例子及代码 1)三行三列
QLabel *lb_name = new QLabel("Project name"); QLabel *lb_projectType = new QLabel("Detection type"); QLabel *lb_extractProcess = new QLabel("Extraction process"); QLineEdit *_le_name = new QLineEdit(); QComboBox *_cb_testNames = new QComboBox; QComboBox *_cb_extract = new QComboBox; QLabel *lb_tipTitle = new QLabel("Number of tips per test"); QLabel *lb_nameBigTip = new QLabel(QStringLiteral("1000l")); QLineEdit *_le_tipNumBig = new QLineEdit(); QLabel *lb_nameSmallTip = new QLabel(QStringLiteral("200l")); QLineEdit *_le_tipNumSmall = new QLineEdit(); QHBoxLayout *pHbl_tipsTitle = new QHBoxLayout; pHbl_tipsTitle->setContentsMargins(0,0,0,0); pHbl_tipsTitle->addWidget(lb_tipTitle); pHbl_tipsTitle->addStretch(); QHBoxLayout *pHbl_tips_big = new QHBoxLayout; pHbl_tips_big->setContentsMargins(0,0,0,0); pHbl_tips_big->addWidget(lb_nameBigTip); pHbl_tips_big->addSpacing(20); pHbl_tips_big->addWidget(_le_tipNumBig); pHbl_tips_big->addStretch(); QHBoxLayout *pHbl_tips_small = new QHBoxLayout; pHbl_tips_small->addWidget(lb_nameSmallTip); pHbl_tips_small->addSpacing(35); pHbl_tips_small->addWidget(_le_tipNumSmall); pHbl_tips_small->addStretch(); QGridLayout *pGl_lbsAndTips = new QGridLayout();//初始化实例 pGl_lbsAndTips->setContentsMargins(30,20,30,20);//设置四周的距离,左30上20右30下20 pGl_lbsAndTips->setHorizontalSpacing(30);//设置水平控件之间的间隙为30,也就是每一列之间的距离 pGl_lbsAndTips->setVerticalSpacing(10);//设置每一行之间的距离,为10 pGl_lbsAndTips->addWidget(lb_name, 0, 0, 1, 1);//第一行第一列,占1行1列 pGl_lbsAndTips->addWidget(lb_projectType, 1, 0, 1, 1);//第二行第一列,占1行1列 pGl_lbsAndTips->addWidget(lb_extractProcess, 2, 0, 1, 1);//第三行第一列,占1行1列 pGl_lbsAndTips->addWidget(_le_name, 0, 1, 1, 1);//第一行第二列,占1行1列 pGl_lbsAndTips->addWidget(_cb_testNames, 1, 1, 1, 1);//第二行第二列,占1行1列 pGl_lbsAndTips->addWidget(_cb_extract, 2, 1, 1, 1);//第三行第二列,占1行1列 pGl_lbsAndTips->addLayout(pHbl_tipsTitle, 0, 2, 1, 1);//第一行第三列,占1行1列 pGl_lbsAndTips->addLayout(pHbl_tips_big, 1, 2, 1, 1);//第二行第三列,占1行1列 pGl_lbsAndTips->addLayout(pHbl_tips_small, 2, 2, 1, 1);//第三行第三列,占1行1列 this->setLayout(pGl_lbsAndTips); 2)有占多行多列的控件A:0行0列开始,占三行一列 QGridLayout *pLayout = new QGridLayout(); pLayout->addWidget(A, 0, 0, 3, 1); B:0行1列开始,占一行两列 pLayout->addWidget(B, 0, 1, 1, 2); C:1行1列开始,占一行两列 pLayout->addWidget(C, 1, 1, 1, 2); D:2行1列开始,占一行一列 pLayout->addWidget(D, 2, 1, 1, 1); E:2行2列开始,占一行一列 pLayout->addWidget(E, 2, 2, 1, 1); F:0行3列开始,占一行一列 pLayout->addWidget(F, 0, 3, 1, 1); G:1行3列开始,占一行一列 pLayout->addWidget(G, 1, 3, 1, 1); H:2行3列开始,占一行一列 pLayout->addWidget(H, 2, 3, 1, 1); 以上网格布局情况可以满足基本开发,项目遇到的一个小问题,记录分享一下 --END-- |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |